﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace GestionApp
{
    public partial class FrmClientesBusq : Form
    {
        private Boolean bFilaActiva;

        public FrmClientesBusq()
        {
            InitializeComponent();
        }

        private void FrmClientesBusq_Load(object sender, EventArgs e)
        {
            
            // Establecer la cadena de conexión a la BD de la aplicación 
            clsComun.setCadenaConexionBD();
            clsComunGestion.CargaComboProvincias(cboProvincia, true);
            txtFechaNacDesde.Enabled = false;
            txtFechaNacHasta.Enabled = false;
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
             MySqlConnection miConexion;
            MySqlDataReader miReader;
            // Consulta SQL 
            MySqlCommand miComando;
            String strSQL;

            ListViewItem lineaLista;
            // Crear la conexión con la base de datos 
            miConexion = new MySqlConnection();
            try{
                // Conectamos con la base de datos
                miConexion.ConnectionString = clsComun.getCadenaConexionBD();
                // Abrimos la conexión.
                miConexion.Open();
                strSQL = "Select cod_cli, nombre, apellidos,tlf_fijo from clientes where 1=1";

                if (txtCodigo.Text != "") 
                    strSQL = strSQL + " and cod_cli = " + txtCodigo.Text;
 
                if (txtDNI.Text != "") 
                    strSQL = strSQL + " and dni = '" + txtDNI.Text + "'"; 

                if (txtNombre.Text != "") 
                    strSQL = strSQL + " and nombre like '%" + txtNombre.Text + "%'"; 

                if (txtApellidos.Text != "") 
                    strSQL = strSQL + " and apellidos like '%" + txtApellidos.Text + "%'";

                if (cboProvincia.SelectedValue.ToString() != "0") 
                    strSQL = strSQL + " and cod_prov = " + 
                                    cboProvincia.SelectedValue.ToString(); 

                if (chkFechaNac.Checked) 
                { 
                    strSQL = strSQL + " and fecha_nac >= '" + 
                                    clsComun.FechaSQL(txtFechaNacDesde.Value) + "'"; 
                    strSQL = strSQL + " and fecha_nac <= '" + 
                                    clsComun.FechaSQL(txtFechaNacHasta.Value) + "'";
                } 

                strSQL = strSQL + " order by apellidos, nombre, cod_cli";
                miComando = new MySqlCommand(strSQL, miConexion); // Ejecutar la consulta y almacenar el resultado en el objeto Reader 
                miReader = miComando.ExecuteReader(); // Si se quiere cargar una fila vacía 
                // Inicializar el control ListView 
                lstClientes.Items.Clear(); 
                // Si la consulta no ha devuelto ningún registro 
                if (miReader.HasRows == false) { 
                MessageBox.Show("No existe ningún Cliente con estos criterios.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); 
                } 
                // Procesamos los resultados, si no hay registros, no procesa nada 
                while (miReader.Read()) 
                { 
                    lineaLista = new ListViewItem(); 
                    lineaLista.Text = miReader.GetString("cod_cli"); 
                    lineaLista.SubItems.Add(miReader.GetString("apellidos")); 
                    lineaLista.SubItems.Add(miReader.GetString("nombre")); 
                    // Si la columna tlf_fijo continue null, se cargará vacía 
                    if (miReader.IsDBNull(miReader.GetOrdinal("tlf_fijo"))) 
                        lineaLista.SubItems.Add(""); 
                    else lineaLista.SubItems.Add(miReader.GetString("tlf_fijo")); 
                    lstClientes.Items.Add(lineaLista); 
                }
                // Cierro el objeto Reader 
                miReader.Close(); 
            }catch (Exception ex) 
            { 
                 MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
            }
            finally { 
                // Desconexión de la base de datos
                miConexion.Close();
            } 
        
        
        }

        private void txtCodigo_TextChanged(object sender, EventArgs e)
        {

            lstClientes.Items.Clear();

        }

        private void txtDNI_TextChanged(object sender, EventArgs e)
        {
            lstClientes.Items.Clear();

        }

        private void txtCodigo_KeyPress(object sender, KeyPressEventArgs e)
        {
            clsComun.TeclaNumero(sender, e);
        }

        private void cboProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstClientes.Items.Clear();

        }

        private void txtApellidos_TextChanged(object sender, EventArgs e)
        {
            lstClientes.Items.Clear();

        }

        private void txtNombre_TextChanged(object sender, EventArgs e)
        {
            lstClientes.Items.Clear();

        }

        private void chkFechaNac_CheckedChanged(object sender, EventArgs e)
        {
            lstClientes.Items.Clear();

            if (chkFechaNac.Checked)
            {
                lblFechaIni.Enabled = true;
                lblFechaFinal.Enabled = true;
                txtFechaNacDesde.Enabled = true;
                txtFechaNacHasta.Enabled = true;
            }
            else
            {

                lblFechaIni.Enabled = false;
                lblFechaFinal.Enabled = false;
                txtFechaNacDesde.Enabled = false;
                txtFechaNacHasta.Enabled = false;
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            frmClientesDet frmDetalle;
            DialogResult resp;

            if (lstClientes.SelectedItems.Count == 0 | bFilaActiva==false)
            {
                MessageBox.Show("Debe seleccionar un cliente.",
                    "Aviso",MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                           
            }
            else
            {
                frmDetalle = new frmClientesDet();
                frmDetalle.setModeOpe(ModosOper.Modificacion);
                frmDetalle.setCodigo(lstClientes.FocusedItem.Text);
                resp=frmDetalle.ShowDialog();
                
                // Si se ha cerrado el formulario de detalle aceptando la operacion
                if (resp==DialogResult.OK)
                {
                    //Ejecutar la búsqueda para refrescar la lista
                    btnBuscar_Click(sender, e);
                }
                else
                {
                    //Volver a marcar la línea que estaba seleccionada de la lista
                    lstClientes.Focus();
                    lstClientes.Items[lstClientes.FocusedItem.Index].Selected=true;
                }
                
            }
            
        }

        private void btnBorrar_Click(object sender, EventArgs e)
        {
            frmClientesDet frmDetalle;
            DialogResult resp;

            if (lstClientes.SelectedItems.Count == 0 | bFilaActiva == false)
            {
                MessageBox.Show("Debe seleccionar un cliente.",
                    "Aviso", MessageBoxButtons.OK,
                    MessageBoxIcon.Information);

            }
            else
            {
                frmDetalle = new frmClientesDet();
                frmDetalle.setModeOpe(ModosOper.Baja);
                frmDetalle.setCodigo(lstClientes.FocusedItem.Text);
                resp = frmDetalle.ShowDialog();

                // Si se ha cerrado el formulario de detalle aceptando la operacion
                if (resp == DialogResult.OK)
                {
                    //Ejecutar la búsqueda para refrescar la lista
                    btnBuscar_Click(sender, e);
                }
                else
                {
                    //Volver a marcar la línea que estaba seleccionada de la lista
                    lstClientes.Focus();
                    lstClientes.Items[lstClientes.FocusedItem.Index].Selected = true;
                }

            }
        }

        private void lstClientes_Leave(object sender, EventArgs e)
        {
            // Cuando la lista pierde el foco, la línea seleccionada vuelve a 
            // su aspecto normal, pero internamente la fila sigue seleccionada. 
            // Si el foco va directamente al botón Modificar o Borrar, 
            // se permitirá la operación (la fila seleccionada sigue estando activa). 
            if (btnModificar.Focused | btnBorrar.Focused) { 
                // La fila se considera activa (permitir Modificación o Baja) 
                bFilaActiva = true; 
            } 
            else 
            { 
                // La fila NO se considera activa (impedir Modificación o Baja) 
                bFilaActiva = false; 
            }
        }

        private void btnAñadir_Click(object sender, EventArgs e)
        {
            frmClientesDet frmDetalle;
            DialogResult resp;

            
                frmDetalle = new frmClientesDet();
                frmDetalle.setModeOpe(ModosOper.Modificacion);
                
                resp = frmDetalle.ShowDialog();

                // Si se ha cerrado el formulario de detalle aceptando la operacion,
                // y la lista
                if (resp == DialogResult.OK & lstClientes.Items.Count > 0)
                {
                    //Ejecutar la búsqueda para refrescar la lista
                    btnBuscar_Click(sender, e);
                }
                            
        }

        private void lstClientes_DoubleClick(object sender, EventArgs e)
        {
            frmClientesDet frmDetalle; // Instancia del formulario de detalle
            
            // Crear instancia del formulario de detalle
            frmDetalle = new frmClientesDet();

            // Asignar el modo de operación de Consulta
            frmDetalle.setModeOpe(ModosOper.Modificacion);

            // Indicar el código del cliente a mostrar
            frmDetalle.setCodigo(lstClientes.FocusedItem.Text);

            // Mostrar la ventana de detalle.
            frmDetalle.ShowDialog();

                
        }

        
    }
}
